const coinChange = function (coins, amount) {
    // 用于保存每个目标总额对应的最小硬币个数
    const f = [];
    // 提前定义已知情况
    f[0] = 0;// 底部
    // 
    for (let i = 1; i <= amount; i++) {
        f[i] = Infinity;
        // 循环每个可用硬币的面额
        for (let j = 0; j < coins.length; j++) {
            // 可以凑成
            if (i - coins[j] >= 0) {
                f[i] = Math.min(f[i], f[i - coins[j]] + 1)
            }
        }
    }
    if (f[amount] === Infinity) {
        return -1;
    }
    return f[amount];
}

console.log(coinChange([1,2,5],11));